package com.scedu.controller;

import com.scedu.domain.ProductCategory;
import com.scedu.domain.ProductInfo;
import com.scedu.service.impl.ProductCategoryServiceImpl;
import com.scedu.service.impl.ProductInfoServiceImpl;
import com.scedu.utils.ResultUtil;
import com.scedu.viewobject.ProductInfoView;
import com.scedu.viewobject.ProductView;
import com.scedu.viewobject.Result;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/*
买家商品
 */
@RestController
@RequestMapping("/buyer/product")
public class BuyerProductController {
    @Autowired
    ProductInfoServiceImpl productInfoService;
    @Autowired
    ProductCategoryServiceImpl productCategoryService;
    @GetMapping("/list")
    public Result list(){
        //1.查询所有的上架商品
        List<ProductInfo> productInfos=productInfoService.findOnlineAll();
        //2.查询类目（一次性查询）

        //传统方法 获取 分类列表
       // List<Integer> categoryTypeList=new ArrayList<>();
//        for(ProductInfo productInfo:productInfos){
//            categoryTypeList.add(productInfo.getCategoryType());
//        }
        //精简做法（利用java8 的lambda）
        List<Integer> categoryTypeList=productInfos.stream()
                .map(e->e.getCategoryType())
                .collect(Collectors.toList());

        List<ProductCategory> productCategories=productCategoryService.findByCategoryTypeIn(categoryTypeList);//类目列表
        //3.数据拼装
        List<ProductView> productViews= new ArrayList<ProductView>();//商品类别队列
        for (ProductCategory productCategory:productCategories){
            ProductView productView=new ProductView();
            //传统方法
           productView.setCategoryType(productCategory.getCategoryType());
           productView.setCategoryName(productCategory.getCategoryName());

           List<ProductInfoView> productInfoViews=new ArrayList<ProductInfoView>();//商品信息队列
            for (ProductInfo productInfo:productInfos){
                if(productInfo.getCategoryType().equals(productCategory.getCategoryType())){
                    ProductInfoView productInfoView=new ProductInfoView();
                    //传统写法
//                    productInfoView.setProductDescription(productInfo.getProductDescription());
//                    productInfoView.setProductIcon(productInfo.getProductIcon());
//                    productInfoView.setProductName(productInfo.getProductName());
//                    productInfoView.setProductPrice(productInfo.getProductPrice());
//                    productInfoView.setProductId(productInfo.getProductId());
                    //精简写法
                    BeanUtils.copyProperties(productInfo,productInfoView);
                    productInfoViews.add(productInfoView);
                }
            }
            productView.setProductInfoViewList(productInfoViews);
            productViews.add(productView);
        }
//        Result result=new Result();
//        result.setCode(200);
//        result.setMsg("成功！");
//        result.setData(productViews);
        // result.setData(Arrays.asList(productView)); 空队列
        return ResultUtil.success(productViews);
    }
    @GetMapping("/listsc")
    public Result listsc(){
        //1.查询所有的上架商品
        //List<ProductInfo> productInfos=productInfoService.findOnlineAll();
        //2.查询类目（一次性查询）
        List<ProductCategory> productCategories=productCategoryService.findAll();
        //3.数据拼装
        Result result=new Result();
        result.setCode(200);
        result.setMsg("成功！");



        List<ProductView> productViews= new ArrayList<ProductView>();//商品类别队列
        for (ProductCategory productCategory:productCategories ){
            ProductView productView=new ProductView();
            productView.setCategoryName(productCategory.getCategoryName()); //单个商品类别
            productView.setCategoryType(productCategory.getCategoryType()); //单个商品类别编号
            //获取商品队列
            List<ProductInfo> productInfos=productInfoService.findByCategoryType(productCategory.getCategoryType());
            List<ProductInfoView> productInfoViews=new ArrayList<ProductInfoView>();//商品信息队列
            for (ProductInfo productInfo:productInfos){
                //获取单个商品信息
                ProductInfoView productInfoView=new ProductInfoView();
                productInfoView.setProductDescription(productInfo.getProductDescription());
                productInfoView.setProductIcon(productInfo.getProductIcon());
                productInfoView.setProductName(productInfo.getProductName());
                productInfoView.setProductPrice(productInfo.getProductPrice());
                productInfoView.setProductId(productInfo.getProductId());
                productInfoViews.add(productInfoView);
            }

            productView.setProductInfoViewList(productInfoViews);
            productViews.add(productView);
        }
        result.setData(productViews);
        // result.setData(Arrays.asList(productView)); 空队列
        return result;
    }
}
